OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3326|回复: 4

pwm dac

[复制链接]

16

主题

36

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
318
金钱
318
注册时间
2017-8-15
在线时间
71 小时
发表于 2018-9-2 18:45:34 | 显示全部楼层 |阅读模式
1金钱
为什么我用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;                             //¿ªÆôÏÂÒ»´Î²¶»ñ
                }
        }
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

70

主题

6761

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13117
金钱
13117
注册时间
2012-11-26
在线时间
3813 小时
发表于 2018-9-2 19:10:37 | 显示全部楼层
没看你的代码,不过pwm怎么测你的DAC?第一次听说这样用
学无止境
回复

使用道具 举报

16

主题

36

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
318
金钱
318
注册时间
2017-8-15
在线时间
71 小时
 楼主| 发表于 2018-9-2 19:56:35 | 显示全部楼层
jermy_z 发表于 2018-9-2 19:10
没看你的代码,不过pwm怎么测你的DAC?第一次听说这样用

谔谔,口误,打快了,我是引脚输出占空比,然后通过DA转换成电压输出,但是一直不对,按照原子哥给的代码,把按键去除以后就显示不对了,直接给一个数显示出来的adcx检测出来反而是我给定的数,而不是输出电压的整数部分。

回复

使用道具 举报

70

主题

6761

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13117
金钱
13117
注册时间
2012-11-26
在线时间
3813 小时
发表于 2018-9-2 20:09:00 | 显示全部楼层
LUOHAO 发表于 2018-9-2 19:56
谔谔,口误,打快了,我是引脚输出占空比,然后通过DA转换成电压输出,但是一直不对,按照原子哥给的代码 ...

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

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

除非你加了RC电路,那样会转换成恒定的电压
学无止境
回复

使用道具 举报

32

主题

883

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4036
金钱
4036
注册时间
2015-11-14
在线时间
545 小时
发表于 2018-11-9 09:27:21 | 显示全部楼层
帮顶

回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 18:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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