国庆期间倒腾了几天,做了软硬件上的小修改,最终是转起来了,感谢!
修改点:
1、软件:在原始的MOTOR_TYPE == 0配置基础上修改了几点(如下代码)
2、硬件:过零检测电路的电阻全部使用的10KΩ,电容使用的100nF
3、软件:顺手将原来的ADC11(ADC输入监测电位调速器)改成了PWM捕获模式,以适配手上的PWM调速器(如下代码)
遗留的问题:
1、BeginSpeed、FinishSpeed 参数不管怎么调整 电机和AO4616芯片都有些发热
2、改写成PWM调速器代码后,PWM调速器可调控区间很小(不到全量程的1/5),超过一半量程转速居然还变慢,电机抖动发热(PWM代码如下)
参数配置:
发现BeginSpeed参数从100到300,对应FinishSpeed 从1000到3000都可以跑起来。原始(MOTOR_TYPE == 0)测试过新老硬件都不行。
- #if (MOTOR_TYPE == -1)
- // 1503电机
- #define MPP 7
- #define ROLL_MinSpeed 80
- #define PRE_PWM_DUTY 100
- #define START_PWM_DUTY 200
- #define STOP_PWM_DUTY 50
- #define BeginSpeed 100
- #define FinishSpeed 1000
- #define D_StartTime 1000
- #define PRE_STATE_TIME1 50
- #define PRE_STATE_TIME2 35
- #define PRE_STATE_TIME3 20
复制代码
PWM调速器代码:
1、依然使用的ADC11的P0.3口作为PWM捕获输入
2、通过CC7/8不重复模式,分别捕获上升和下降沿,只获取PWM高电平时长
3、测试手里的PWM调速器数据(在STC8H1K28下),高电平最小到最大占空比是850us到2160us(使用时直接取的1000 ~ 2023作为电机PWM_SET值输入)
- // PWM输入信号捕获
- u16 cap1,cap2; // CC7、CC8捕获值
- u16 cap; // 捕获差值即测量的PWM高电平脉宽
-
-
- void PWMIN_Config(void) // 输入信号PWM初始化设置
- {
- //--------------------------PWMB设置-CC7捕获上升沿、CC8捕获下降沿-----------------------
- PWMB_PS |= 0x80; // PWM通道8映射P0.3
- PWMB_CCER2 = 0x00; // 关闭通道
- PWMB_CCMR3 = 0x02; // CC7通道配置为输入,映射在TI8FP7上
- PWMB_CCMR4 = 0x01; // CC8通道配置为输入,映射在TI8FP8上
- PWMB_CCER2 = 0x11; // 使能CC7、CC8通道
- PWMB_CCER2 |= 0x00; // 设置CC7捕获上升沿
- PWMB_CCER2 |= 0x20; // 设置CC8捕获下降沿
-
- PWMB_IER = 0x10; // 使能CC8捕获中断
- PWMB_CR1 |= 0x01; // 使能PWMB计数器
- }
-
- void PWMIN_ISR() interrupt PWMB_VECTOR
- {
- if (PWMB_SR1 & 0x10) // 当CC8捕获中断标志置1
- {
- PWMB_SR1 &= ~0x10; // 清零捕获中断标志
- cap1 =(PWMB_CCR7H << 8) + PWMB_CCR7L; // 读取捕获1计数值CCR7
- cap2 =(PWMB_CCR8H << 8) + PWMB_CCR8L; // 读取捕获2计数值CCR8
- cap = cap2 - cap1; // 高电平脉宽=两次捕获差值
- }
- }
复制代码
|