找回密码
 立即注册
查看: 657|回复: 0

PWM控制点击的停止,正转,反转

[复制链接]

11

主题

-1

回帖

59

积分

注册会员

积分
59
发表于 2023-9-6 16:25:16 | 显示全部楼层 |阅读模式
PWM_Init初始化


  1. void Pwm_Init(void)                        //PWMA的初始化
  2. {
  3.         //1.时钟源选择  这里不改,默认22.1184mhz
  4.        
  5.         //2.时基单元选择
  6.         PWMA_PSCRH = (u8)(PWM_PSCR>>8);                                //1分频
  7.         PWMA_PSCRL = (u8)(PWM_PSCR);
  8.        
  9.         PWMA_ARRH  = (u8)(PWM_ARR>>8);
  10.         PWMA_ARRL  = (u8)(PWM_ARR);
  11.        
  12.         PWMA_CCR1H  = (u8)(PWM_CCR>>8);
  13.         PWMA_CCR1L  = (u8)(PWM_CCR);
  14.        
  15.        
  16.         //3.输入输出的引脚配置
  17.         PWMA_ENO = 0X00;
  18.         PWMA_ENO |= 0X01;                        //使能PWM1p通道输出
  19.         PWMA_ENO |= 0X02;                        //使能PWM1n通道输出
  20.        
  21.         PWMA_PS =0x00;                                //选择PWM1从P60引脚输出
  22.         PWMA_PS |= (2<<0);       
  23.        
  24.         //4.输入输出模式设置
  25.         PWMA_CCER1 = 0X00;
  26.         PWMA_CCMR1 = 0X68;                        //pwm模式1 配置置位输出
  27.         PWMA_CCER1 = 0x05;                        //开启输出比较通道
  28. //        PWMA_CCER1 |= 0x08;                        //
  29.        
  30.         PWMA_DTR = 175;                                        // 10us死区时间
  31.        
  32.         PWMA_BKR = 0X80;                        //使能主输出
  33.        
  34.         PWMA_CR1 |= 0X01;                        //启动计数器
  35. }
复制代码
Pwma1_Set单路pwm输出

  1. void Pwma1_Set(int pwm)
  2. {
  3.         if(pwm == 0)                                                                                                        //电机停止
  4.         {
  5.                 // 1p ,1n均为低电平
  6.                 PWMA_CCR1H = 0;                                                                                        // 清空通道(输出通道关闭)
  7.                 PWMA_CCR1L = 0;                                                                                        // 清空通道(输出通道关闭)
  8.                 PWMA_ENO &= 0XFC;                                                                                // 关闭1p,1n通道(不影响别的通道用的&符合)
  9.                 PWM1P = 0;
  10.                 PWM1N = 0;
  11.         }
  12.         else if(pwm > 0)                  //电机正转
  13.         {
  14.                 if(pwm > (PWM_ARR+1))
  15.                 {
  16.                                 pwm = (PWM_ARR+1);
  17.                 }
  18.                 PWMA_CCR1H  = (u8)(pwm>>8);
  19.                 PWMA_CCR1L  = (u8)(pwm);       
  20.                 PWMA_ENO &= 0XFC;                                                                                // 关闭1p,1n通道(不影响别的通道用的&符合)
  21.                 PWMA_ENO |= 0X01;                                                                                //使能PWM1p通道输出
  22.                 PWM1N = 0;
  23.         }
  24.         else if(pwm < 0)                                                                                        //电机反正
  25.         {
  26.                 pwm = -pwm;
  27.                 if(pwm > (PWM_ARR+1))
  28.                 {
  29.                                 pwm = (PWM_ARR+1);
  30.                 }
  31.                 PWMA_CCR1H  = (u8)(pwm>>8);
  32.                 PWMA_CCR1L  = (u8)(pwm);       
  33.                 PWMA_ENO &= 0XFC;                                                                                // 关闭1p,1n通道(不影响别的通道用的&符合)
  34.                 PWMA_ENO |= 0X02;                                                                                //使能PWM1n通道输出
  35.                 PWM1P = 0;
  36.         }       
  37. }
复制代码
调用上面的两个函数
  1. void main()                                        //程序开始运行的入口
  2. {
  3. //        u8 i,j;
  4.         int pwm = 0;
  5.         sys_init();                                //USB功能+IO口初始化
  6.         usb_init();                                //usb库初始化
  7.         EUSB = 1;
  8.         Timer0_Init();                        //定时器0初始化
  9.         EA = 1;                                            //CPU开放中断,打开总中断。
  10.        
  11.         while( DeviceState != DEVSTATE_CONFIGURED );
  12. //        delay_ms(2000);
  13.        
  14.         P40 = 0;
  15.         Pwm_Init();                        // PWM的初始化
  16.         while(1)                //死循环
  17.         {
  18.                 Pwma1_Set(pwm);                        //初始化参数
  19.                 delay_ms(2);
  20.                 if( bUsbOutReady )                                                               
  21.                 {
  22.                         // “0”  “500”  “-300”
  23.                         pwm = atoi(UsbOutBuffer);                                                        //将接收到的文本字符串转化成有符号的整形变量
  24.                         printf( "PWM比较值:%d\r\n",pwm);
  25.                        
  26. //                        USB_SendData(UsbOutBuffer,OutNumber);
  27.                         usb_OUT_done();
  28.                         memset(UsbOutBuffer,0,OutNumber);
  29.                 }
  30.                 if( TIM_10MS_Flag==1 )                                                                        //如果10ms到了
  31.                 {
  32.                         TIM_10MS_Flag = 0;                                                                        //清空标志位       
  33.                 }
  34.         }
  35. }
复制代码
本代码试验箱和屠龙刀三.2共用。
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-3 12:53 , Processed in 0.120713 second(s), 45 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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