PWM_Init初始化
- void Pwm_Init(void) //PWMA的初始化
- {
- //1.时钟源选择 这里不改,默认22.1184mhz
-
- //2.时基单元选择
- PWMA_PSCRH = (u8)(PWM_PSCR>>8); //1分频
- PWMA_PSCRL = (u8)(PWM_PSCR);
-
- PWMA_ARRH = (u8)(PWM_ARR>>8);
- PWMA_ARRL = (u8)(PWM_ARR);
-
- PWMA_CCR1H = (u8)(PWM_CCR>>8);
- PWMA_CCR1L = (u8)(PWM_CCR);
-
-
- //3.输入输出的引脚配置
- PWMA_ENO = 0X00;
- PWMA_ENO |= 0X01; //使能PWM1p通道输出
- PWMA_ENO |= 0X02; //使能PWM1n通道输出
-
- PWMA_PS =0x00; //选择PWM1从P60引脚输出
- PWMA_PS |= (2<<0);
-
- //4.输入输出模式设置
- PWMA_CCER1 = 0X00;
- PWMA_CCMR1 = 0X68; //pwm模式1 配置置位输出
- PWMA_CCER1 = 0x05; //开启输出比较通道
- // PWMA_CCER1 |= 0x08; //
-
- PWMA_DTR = 175; // 10us死区时间
-
- PWMA_BKR = 0X80; //使能主输出
-
- PWMA_CR1 |= 0X01; //启动计数器
- }
复制代码
Pwma1_Set单路pwm输出
- void Pwma1_Set(int pwm)
- {
- if(pwm == 0) //电机停止
- {
- // 1p ,1n均为低电平
- PWMA_CCR1H = 0; // 清空通道(输出通道关闭)
- PWMA_CCR1L = 0; // 清空通道(输出通道关闭)
- PWMA_ENO &= 0XFC; // 关闭1p,1n通道(不影响别的通道用的&符合)
- PWM1P = 0;
- PWM1N = 0;
- }
- else if(pwm > 0) //电机正转
- {
- if(pwm > (PWM_ARR+1))
- {
- pwm = (PWM_ARR+1);
- }
- PWMA_CCR1H = (u8)(pwm>>8);
- PWMA_CCR1L = (u8)(pwm);
- PWMA_ENO &= 0XFC; // 关闭1p,1n通道(不影响别的通道用的&符合)
- PWMA_ENO |= 0X01; //使能PWM1p通道输出
- PWM1N = 0;
- }
- else if(pwm < 0) //电机反正
- {
- pwm = -pwm;
- if(pwm > (PWM_ARR+1))
- {
- pwm = (PWM_ARR+1);
- }
- PWMA_CCR1H = (u8)(pwm>>8);
- PWMA_CCR1L = (u8)(pwm);
- PWMA_ENO &= 0XFC; // 关闭1p,1n通道(不影响别的通道用的&符合)
- PWMA_ENO |= 0X02; //使能PWM1n通道输出
- PWM1P = 0;
- }
- }
复制代码
调用上面的两个函数
- void main() //程序开始运行的入口
- {
- // u8 i,j;
- int pwm = 0;
- sys_init(); //USB功能+IO口初始化
- usb_init(); //usb库初始化
- EUSB = 1;
- Timer0_Init(); //定时器0初始化
- EA = 1; //CPU开放中断,打开总中断。
-
- while( DeviceState != DEVSTATE_CONFIGURED );
- // delay_ms(2000);
-
- P40 = 0;
- Pwm_Init(); // PWM的初始化
- while(1) //死循环
- {
- Pwma1_Set(pwm); //初始化参数
- delay_ms(2);
- if( bUsbOutReady )
- {
- // “0” “500” “-300”
- pwm = atoi(UsbOutBuffer); //将接收到的文本字符串转化成有符号的整形变量
- printf( "PWM比较值:%d\r\n",pwm);
-
- // USB_SendData(UsbOutBuffer,OutNumber);
- usb_OUT_done();
- memset(UsbOutBuffer,0,OutNumber);
- }
- if( TIM_10MS_Flag==1 ) //如果10ms到了
- {
- TIM_10MS_Flag = 0; //清空标志位
- }
- }
- }
复制代码
本代码试验箱和屠龙刀三.2共用。
|