找回密码
 立即注册
楼主: 梁工

三相无刷直流电机驱动-8H系列-带HALL 梁工例子

  [复制链接]

3

主题

47

回帖

173

积分

注册会员

积分
173
发表于 2023-5-17 14:08:40 | 显示全部楼层
dong9*** 发表于 2023-5-17 13:03
梁工,你好! 电机运作程序中,对PWMB_CCER2   不停的设置,是不是也会影响到PWM8  做PWM独立输出的正常 ...

刚才测试,PWM8 有脉宽输出了,应该 电机运作,改变了PWMB_ 中有关PWM8的设置,我再仔细看看,电机运转不改变到PWM8的寄存器设置应该就行了。
回复 支持 反对

使用道具 举报 送花

3

主题

47

回帖

173

积分

注册会员

积分
173
发表于 2023-5-19 10:08:16 | 显示全部楼层
梁工,你好! 目前PWM8 脉宽调制有输出了,目前发现高低电位切换时候,都出现一个尖峰问题,目前20K输出4% 脉宽,尖峰峰值都超5.5伏,万用表测试直流有效0.199伏了,我之前样品同样条件,输出20K 4% 脉宽,无尖峰,万用表直流有效值是0.150伏.  这样模拟工控信号用,误差太大了,看看如何消除这个尖峰值,谢谢了 !

点评

贴示波器波形照片,显示2个波形,我要看波形细节。  详情 回复 发表于 2023-5-19 10:15
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2023-5-19 10:15:03 | 显示全部楼层
dong9*** 发表于 2023-5-19 10:08
梁工,你好! 目前PWM8 脉宽调制有输出了,目前发现高低电位切换时候,都出现一个尖峰问题,目前20K输出4%  ...

贴示波器波形照片,显示2个波形,我要看波形细节。
回复 支持 反对

使用道具 举报 送花

3

主题

47

回帖

173

积分

注册会员

积分
173
发表于 2023-5-19 12:50:06 | 显示全部楼层
dong9*** 发表于 2023-5-17 13:03
梁工,你好! 电机运作程序中,对PWMB_CCER2   不停的设置,是不是也会影响到PWM8  做PWM独立输出的正常 ...

图片复制不进去,点击图片窗口,需要啥链接!

点评

回复评论处点高级模式,可以上传图片  详情 回复 发表于 2023-5-19 13:25
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:81
  • 最近打卡:2024-10-17 09:35:06

9

主题

180

回帖

1778

积分

版主

积分
1778
发表于 2023-5-19 13:25:56 | 显示全部楼层
dong9*** 发表于 2023-5-19 12:50
图片复制不进去,点击图片窗口,需要啥链接!

回复评论处点高级模式,可以上传图片
Z9E9GIEO0{G6V843CTJX1RX.png
P4OSE(N56[[_2EAUQY5O3QP.png
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:513
  • 最近打卡:2025-05-01 04:31:49

24

主题

515

回帖

986

积分

荣誉版主

积分
986
发表于 2023-5-22 09:21:40 | 显示全部楼层
请教PWMB_SMCR   = 0x60;语句的作用。
应该是PWMB_SMCR   = 0x06;

//========================================================================
// 函数: void PWMB_config(void)
// 描述: PPWM配置函数。
// 参数: noe.
// 返回: none.
// 版本: V1.0, 2021-5-10
// 备注:
//========================================================================
void PWMB_config(void)
{
        P_SW2 |= 0x80;                //SFR enable   

        PWMB_PSCR = 11;        // 预分频寄存器, 分频 Fck_cnt = Fck_psc/(PSCR[15:0]+1), 边沿对齐PWM频率 = SYSclk/((PSCR+1)*(AAR+1)), 中央对齐PWM频率 = SYSclk/((PSCR+1)*(AAR+1)*2).
        PWMB_DTR  = 0;        // 死区时间配置, n=0~127: DTR= n T,   0x80 ~(0x80+n), n=0~63: DTR=(64+n)*2T,  
                                        //                                0xc0 ~(0xc0+n), n=0~31: DTR=(32+n)*8T,   0xE0 ~(0xE0+n), n=0~31: DTR=(32+n)*16T,
        PWMB_CCER1  = 0;
        PWMB_CCER2  = 0;
        PWMB_CR1    = 0;                // 使能计数器, 允许自动重装载寄存器缓冲, 边沿对齐模式, 向上计数,  bit7=1:写自动重装载寄存器缓冲(本周期不会被打扰), =0:直接写自动重装载寄存器本(周期可能会乱掉)
        PWMB_CR2    = 0;
        PWMB_SR1    = 0;
        PWMB_SR2    = 0;
        PWMB_ENO    = 0;        //IO禁止输出PWM,  bit6: ENO8P, bit4: ENO7P,  bit2: ENO5P,  bit0: ENO4P
        PWMB_PS     = 0;
        PWMB_IER    = 0;

        PWMB_CCMR1  = 0x31;                // 通道5模式配置, 配置成输入通道, 8个时钟滤波
//        PWMB_CCER1 |= (0x01+0x02);        // 0x01:允许输入捕获, +0x00:上升沿, +0x02:下降沿
        PWMB_PS    |= 0;                // 选择IO, 0:选择P2.0, 1:选择P1.7, 2:选择P0.0, 3:选择P7.4,
//        PWMB_IER   |= 0x02;                // 使能中断

        PWMB_CCMR2  = 0x31;                // 通道6模式配置, 配置成输入通道, 8个时钟滤波
//        PWMB_CCER1 |= (0x10+0x20);        // 0x10:允许输入捕获, +0x00:上升沿, +0x20:下降沿
        PWMB_PS    |= (0<<2);        // 0:选择P2.1, 1:选择P5.4, 2:选择P0.1, 3:选择P7.5,
//        PWMB_IER   |= 0x04;                // 使能中断

        PWMB_CCMR3  = 0x31;                // 通道7模式配置, 配置成输入通道, 8个时钟滤波
//        PWMB_CCER2 |= (0x01+0x02);        // 0x01:允许输入捕获, +0x00:上升沿, +0x02:下降沿
        PWMB_PS    |= (0<<4);        // 选择IO, 0:选择P2.2, 1:选择P3.3, 2:选择P0.2, 3:选择P7.6,
//        PWMB_IER   |= 0x08;                // 使能中断

        PWMB_EGR    = 0x01;                //产生一次更新事件, 清除计数器和预分频计数器, 装载预分频寄存器的值
        PWMB_SMCR   = 0x60;
        PWMB_BKR    = 0x00;                //主输出使能 相当于总开关
        PWMB_CR1   |= 0x01;                // 使能计数器, 允许自动重装载寄存器缓冲, 边沿对齐模式, 向上计数,  bit7=1:写自动重装载寄存器缓冲(本周期不会被打扰), =0:直接写自动重装载寄存器本(周期可能会乱掉)

//        P2n_standard(0x07);        //通道5 6 7输出IO设置为准双向口
}

考虑到代码运行ok,说明该语句可以删除不用。

点评

SMCR是从模式寄存器,你给的是0x60,即最高位为0,所以给的值没有作用,等于没有这一句。  详情 回复 发表于 2023-5-22 10:20
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2023-5-22 10:20:01 | 显示全部楼层
社区*** 发表于 2023-5-22 09:21
请教PWMB_SMCR   = 0x60;语句的作用。
应该是PWMB_SMCR   = 0x06;

SMCR是从模式寄存器,你给的是0x60,即最高位为0,所以给的值没有作用,等于没有这一句。
1.png

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:513
  • 最近打卡:2025-05-01 04:31:49

24

主题

515

回帖

986

积分

荣誉版主

积分
986
发表于 2023-5-22 10:35:44 | 显示全部楼层
梁*** 发表于 2023-5-22 10:20
SMCR是从模式寄存器,你给的是0x60,即最高位为0,所以给的值没有作用,等于没有这一句。

再请教一下,捕获脉冲宽度的例程中PWMB_SMCR   = 0x54;

为什么bit7位为0?

点评

哪里的例子?我的例子没有操作SMCR寄存器: void PWMB_config(void) { P_SW2 |= 0x80; //SFR enable PWMB_CCER1 = 0; PWMB_CCER2 = 0; PWMB_SR1 = 0; PWMB_SR2 = 0; PWMB_ENO = 0; //IO禁止输  详情 回复 发表于 2023-5-22 22:34
回复 支持 反对

使用道具 举报 送花

3

主题

47

回帖

173

积分

注册会员

积分
173
发表于 2023-5-22 18:58:56 | 显示全部楼层
梁*** 发表于 2023-5-12 10:51
1、请参考下面的连接里的程序,PWMB的程序。
2、你应该是过冲了,机械系统有惯性的,用PID,或者少用P(比 ...

梁工,你好!目前我输入工控0-10伏,单片机AD口是0-4伏,设置0伏为0档, 4伏为54档,转动电位器采样:电位器位置采样0.44-4.78 V, 0.44伏与对应0 档, 4.78位置对应54 挡位,目前猛改变工控0-10伏,电位器旋转头和尾看着正常,慢慢变化工控0-10伏, 电位器旋转头和尾 的位置会出现不到位的问题。改如何改进?
                         
                        if(!B_RUN && (PWW_Set >= 2))// &&( I_MAX==0 ))                // PWM_Set >= 30, 并且电机未运行, 则启动电机 30  16
                        {
                                PWM_Value = 30;                        //启动电机的最低PWM, 根据具体电机而定
                                PWMA_CCR1L = PWM_Value;        //输出PWM
                                PWMA_CCR2L = PWM_Value;
                                PWMA_CCR3L = PWM_Value;
                                B_RUN = 1;                //标注运行
                                StepMotor();        //启动换相
                                //  POWER_WORK=0;
                        }

点评

是否将ADC输入端设置为高阻了?必须设置为高阻。 电位器调到0,应该是0V,如果没有到0V(或非常接近0V),则是电位器的问题,因为ADC是输入,电压由电位器提供。  详情 回复 发表于 2023-5-22 22:31
回复 支持 反对

使用道具 举报 送花

3

主题

47

回帖

173

积分

注册会员

积分
173
发表于 2023-5-22 21:35:33 | 显示全部楼层
一轮*** 发表于 2023-5-19 13:25
回复评论处点高级模式,可以上传图片


目前就想了解,这种尖峰能否克服。


微信图片_20230519112034.jpg 微信图片_20230519112015.jpg
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-1 19:36 , Processed in 0.150423 second(s), 113 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表