APM使用LUA脚本发送实现遥控器PWM信号输出CAN协议信号
需求由于舵机是CAN总线舵机需实现APM开源飞控遥控器输入PWM通道到CAN的发送。方法1修改APM固件源码编译运行测试。实现复杂。方法2使用lua脚本。实现简单目前采用方法2使用lua脚本几乎所有运行ArduPilot 4.5及以上固件、并且有足够存储空间的飞控理论上都支持Lua脚本一定要升级飞控版本到4.5以上。早期的支持比较差各种运行不通。✅ 运行Lua PWM→CAN 的必要设置完整清单一、固件版本要求项目 要求 说明ArduPilot版本 ≥ 4.5.0 4.6.3验证可用4.5以上才完整支持Lua CAN API飞控硬件 有足够Flash/MCU CUAV V5/X7、Pixhawk系列、H7系列等二、参数设置必须Lua脚本总开关参数 设置值 说明SCR_ENABLE 1 启用Lua脚本引擎SCR_DIR_DISABLE 0 确保scripts目录被读取默认0CAN接口参数以CAN1为例参数 设置值 说明CAN_P1_DRIVER 1 启用CAN1硬件接口CAN_D1_PROTOCOL 12 (Scripting2) 关键 让Lua脚本接管CAN口CAN_P1_BITRATE 按需如250000 与你的CAN设备匹配如果是用第二个CAN口对应参数为 CAN_P2_DRIVER、CAN_D2_PROTOCOL修改参数后的关键操作操作 说明写入参数 点击写入参数保存完全断电重启 拔掉USB线和电池等30秒再上电只点重启飞控可能不够彻底冷启动才能让CAN驱动正确初始化三、脚本文件要求项目 要求 说明存放路径 /APM/scripts/ 必须严格区分大小写文件名后缀 .lua小写 不能是 .lua.txt文件编码 UTF-8 无BOM 推荐用VS Code/Notepad编辑上传新脚本前快速过一遍固件版本 ≥ 4.5当前4.6.3 ✅SCR_ENABLE 1CAN_P1_DRIVER 1CAN_D1_PROTOCOL 12关键已完全断电重启拔USB电池脚本放在 /APM/scripts/ 目录文件名以 .lua 结尾代码中用 CAN:get_device2(5)Protocol 12专用定时用 update 函数最兼容CAN ID用 uint32_t() 包裹CAN分析仪已监听或设备已连接-- pwm_to_can_template.lua-- 稳定版模板Protocol 12 update函数lualocaldriverCAN:get_device2(5)ifnotdriverthengcs:send_text(0,CAN init failed)returnendgcs:send_text(0,PWM→CAN script started)locallast_send0localTX_INTERVAL20-- mslocalframe_count0localfunctionsend_frames()frame_countframe_count1forch1,9do-- 读取PWMlocalpwmrc:get_pwm(ch)or1500pwmmath.min(math.max(pwm,1000),2000)-- 构建数据根据你的协议修改localdata{0x22,0x03,0x60,0x00,pwm%256,math.floor(pwm/256),0x00,0x00}-- 发送CAN帧localmsgCANFrame()msg:id(uint32_t(0x0600ch))msg:dlc(8)fori0,7domsg:data(i,data[i1])enddriver:write_frame(msg,10000)end-- 调试输出每秒一次ifframe_count%(1000/TX_INTERVAL)0thengcs:send_text(0,string.format(Running: %d Hz,1000/TX_INTERVAL))endendlocalfunctionupdate()localnowmillis()ifnow-last_sendTX_INTERVALthensend_frames()last_sendnowendreturnupdate,TX_INTERVALendreturnupdate()保存代码然后在mission planner中拷贝到这里如果没有SCRIPTS文件夹就自己建立一个。最后的效果最后用雷迅X7的飞控实现CAN通信舵机如下
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2425339.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!