STM32F103C8T6实现DSHOT600协议

本文详细介绍了如何使用STM32F103C8T6微控制器实现DSHOT600协议,包括协议的原理、PWM波形生成、初始化ESC_CMD数组以及代码实现。关键点包括油门数据格式、帧间隔、CRC校验位的设置,同时提到了电调油门限制及CRC计算的正确性。
摘要由CSDN通过智能技术生成

Dshot是一种飞控和电调之间的数字通讯协议,DSHOT600 就是每秒传输600k比特,DSHOT300就是每秒传输300K比特,个人感觉Dshot600有点类似红外协议,用电平时间表示“0”“1”。

0:高电平大概占据625ns,
1:高电平大概占据1250ns,
一个bit周期大概为1.67us。
(有一些误差是可以接受的)

Dshot600一帧为18bit,
0-10bit为油门数据(高位在前),
11bit设置为“0”(好像有个什么功能,我不care),
12-15bit为CRC校验位,
16-17bit为两个周期的低电平,表示帧间间隔。

//定时器 4分频72/4=18mhz ;分频不固定,可自行调整
//pwm波周期 1.67us ;对应的pwm分辨率 1.67us /(1/18)= 30;
// 0.625us/(1/18) = 11; 0的占空比11/30
// 1.250us/(1/18) = 22; 1的占空比22/30
 
#define ESC_BIT_0     11 
#define ESC_BIT_1     22  
#define ESC_CMD_BUF_LEN 18 
u8 ESC_CMD[ESC_CMD_BUF_LEN]={0};

需要输出周期为1.67us的PWM波,由协议可知,一次要发18个PWM周期,也就是要每1.67us改变一下PWM占空比,为了减轻CPU压力,占空比数据放在占空比数组ESC_CMD,用DMA将数据自动搬运到定时器CCR中。

代码实现DSHOT600(

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值