pwm dac

2019-07-20 05:14发布

为什么我用pwm采集dac的电压出来以后,采集出来反而是pwm的占空比呢
代码如下:
int main(void)
{
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        delay_init(168);
        uart1_init(115200);
        uart3_init(115200);
        GPIO_Init_Pins();
        PID_left_init();
  PID_right_init();       
        Adc_Init();
        Dac1_Init();
        TIM5_PWM_Init(10000-1,84-1);   
        TIM3_CH1_Cap_Init(0XFFFF,84-1);
        DAC_SetChannel1Data(DAC_Align_12b_R,left.speed_v);
        //DAC_SetChannel1Data(DAC_Align_12b_R,right.speed_v);
           while(1)
        {
               
        GPIO_SetBits(GPIOB,GPIO_Pin_8);
        GPIO_SetBits(GPIOB,GPIO_Pin_9);  
        GPIO_SetBits(GPIOB,GPIO_Pin_7);
        GPIO_SetBits(GPIOB,GPIO_Pin_6);
        left.speed_v = CM_pid_left(100);
  //right.speed_v= CM_pid_right(100);
        TIM_SetCompare1(TIM5, left.speed_v);
        TIM_SetCompare2(TIM5, right.speed_v);
        //DAC_SetChannel1Data(DAC_Align_12b_R,left.speed_v);
               
          adcx=TIM_GetCapture1(TIM5);//¼ì²â×óÂֵĻô¶û´«¸ÐÆ÷µçѹֵ
                tempADCx=(float)adcx*(3.3/4096);                             
                adcx=tempADCx;
                tempADCx-=adcx;
                tempADCx*=1000;
        DAC_SetChannel1Data(DAC_Align_12b_R,left.speed_v);
        //DAC_SetChannel1Data(DAC_Align_12b_R,right.speed_v);
               
//                adcy=DAC_GetDataOutputValue(DAC_Channel_2); //¼ì²âÓÒÂֵĻô¶û´«¸ÐÆ÷µÄµçѹֵ
//                tempADCy=(float)adcy*(3.3/4096);                             
//                adcy=tempADCy;
//                 tempADCy-=adcy;
//                tempADCy*=1000;
               
                if(TIM3CH1_CAPTURE_STA&0X80)        //³É¹¦²¶»ñµ½ÁËÒ»´Î¸ßµçƽ
                {
                        templeft=TIM3CH1_CAPTURE_STA&0X3F;
                        templeft*=0XFFFF;                                          //Òç³öʱ¼ä×ܺÍ
                        templeft+=TIM3CH1_CAPTURE_VAL;                   //µÃµ½×ܵĸߵçƽʱ¼ä
                        TIM3CH1_CAPTURE_STA=0;                             //¿ªÆôÏÂÒ»´Î²¶»ñ
                }
                if(TIM3CH2_CAPTURE_STA&0X80)        //³É¹¦²¶»ñµ½ÁËÒ»´Î¸ßµçƽ
                {
                        tempright=TIM3CH2_CAPTURE_STA&0X3F;
                        tempright*=0XFFFF;                                          //Òç³öʱ¼ä×ܺÍ
                        tempright+=TIM3CH2_CAPTURE_VAL;                   //µÃµ½×ܵĸߵçƽʱ¼ä
                        TIM3CH2_CAPTURE_STA=0;                             //¿ªÆôÏÂÒ»´Î²¶»ñ
                }
        }
}




int main(void)
{
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        delay_init(168);
        uart1_init(115200);
        uart3_init(115200);
        GPIO_Init_Pins();
        PID_left_init();
  PID_right_init();       
        Adc_Init();
        Dac1_Init();
        TIM5_PWM_Init(10000-1,84-1);   
        TIM3_CH1_Cap_Init(0XFFFF,84-1);
        DAC_SetChannel1Data(DAC_Align_12b_R,left.speed_v);
        //DAC_SetChannel1Data(DAC_Align_12b_R,right.speed_v);
           while(1)
        {
               
        GPIO_SetBits(GPIOB,GPIO_Pin_8);
        GPIO_SetBits(GPIOB,GPIO_Pin_9);  
        GPIO_SetBits(GPIOB,GPIO_Pin_7);
        GPIO_SetBits(GPIOB,GPIO_Pin_6);
        left.speed_v = CM_pid_left(100);
  //right.speed_v= CM_pid_right(100);
        TIM_SetCompare1(TIM5, left.speed_v);
        TIM_SetCompare2(TIM5, right.speed_v);
        //DAC_SetChannel1Data(DAC_Align_12b_R,left.speed_v);
               
          adcx=TIM_GetCapture1(TIM5);//¼ì²â×óÂֵĻô¶û´«¸ÐÆ÷µçѹֵ
                tempADCx=(float)adcx*(3.3/4096);                             
                adcx=tempADCx;
                tempADCx-=adcx;
                tempADCx*=1000;
        DAC_SetChannel1Data(DAC_Align_12b_R,left.speed_v);
        //DAC_SetChannel1Data(DAC_Align_12b_R,right.speed_v);
               
//                adcy=DAC_GetDataOutputValue(DAC_Channel_2); //¼ì²âÓÒÂֵĻô¶û´«¸ÐÆ÷µÄµçѹֵ
//                tempADCy=(float)adcy*(3.3/4096);                             
//                adcy=tempADCy;
//                 tempADCy-=adcy;
//                tempADCy*=1000;
               
                if(TIM3CH1_CAPTURE_STA&0X80)        //³É¹¦²¶»ñµ½ÁËÒ»´Î¸ßµçƽ
                {
                        templeft=TIM3CH1_CAPTURE_STA&0X3F;
                        templeft*=0XFFFF;                                          //Òç³öʱ¼ä×ܺÍ
                        templeft+=TIM3CH1_CAPTURE_VAL;                   //µÃµ½×ܵĸߵçƽʱ¼ä
                        TIM3CH1_CAPTURE_STA=0;                             //¿ªÆôÏÂÒ»´Î²¶»ñ
                }
                if(TIM3CH2_CAPTURE_STA&0X80)        //³É¹¦²¶»ñµ½ÁËÒ»´Î¸ßµçƽ
                {
                        tempright=TIM3CH2_CAPTURE_STA&0X3F;
                        tempright*=0XFFFF;                                          //Òç³öʱ¼ä×ܺÍ
                        tempright+=TIM3CH2_CAPTURE_VAL;                   //µÃµ½×ܵĸߵçƽʱ¼ä
                        TIM3CH2_CAPTURE_STA=0;                             //¿ªÆôÏÂÒ»´Î²¶»ñ
                }
        }
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
jermy_z
1楼-- · 2019-07-20 06:20
没看你的代码,不过pwm怎么测你的DAC?第一次听说这样用
LUOHAO
2楼-- · 2019-07-20 10:36
 精彩回答 2  元偷偷看……
jermy_z
3楼-- · 2019-07-20 15:40
LUOHAO 发表于 2018-9-2 19:56
谔谔,口误,打快了,我是引脚输出占空比,然后通过DA转换成电压输出,但是一直不对,按照原子哥给的代码 ...

原子的例程本来就不是读取电压值啊,你是不是哪点理解错了?

STM32产生的pwm只有3.3V和0V两个值

除非你加了RC电路,那样会转换成恒定的电压
Electronic
4楼-- · 2019-07-20 19:49
帮顶

一周热门 更多>