28335的ad采样并如何使用pwm波输出
我想请问一下,adc模块和pwm模块这两个是怎么联系在一起的,是通过AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 0x1; 还是通过AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1=1;来实现。又或者有其它方法请各位大神们给支支招
我是这样理解的,你这个项目应该做成,PWM输出一个固定频率的信号,假设50HZ,AD采到0V,输出占空比为0的PWM信号,AD采到5V输出100%占空比的信号,具体做法就是根据AD采回来的数值,赋值给PWM输出的分子部分,接收端用定时器测量接收到的PWM信号的高电平时间。
具体的代码我不会,但我可以跟你说说AD是如何跟PWM联系起来的,比如说,你做一个自动拉窗帘的小装置,用一个光敏电阻和一个电机,AD就是用来采集光线变化程度的,电压越高则代表光线越强,当你光照超过某一阈值时,你便控制电机收放窗帘,如何控制电机呢,那当然是用PWM了,这便将PWM于AD联系起来了。
谢谢你的说明
但现在我在编AD采样,pwm波输出的程序,目前就是单个的adc模块和单个的pwm模块可以考虑明白,但当两个结合在一起的时候发现不知道怎么把两者联系起来。
就比如说我ad采一个1.5V的电压,然后通过pwm输出一个波形,就不知道如何实现。
TI的例程有类似的代码,
你可以去TI官网看看。
或者其他做28335开发板的厂商给的也有AD采样的例程。
你的这个PWM是用来控制东西吗?还是只是作为输出?
只是作为数字量的输出
这个,我之前看过,但是我试过一下,发现ad采集的数据跟pwm输出的波形关系不大
给你看一下那个代码:
void ADC_init(void)
{
InitAdc();
AdcRegs.ADCTRL1.bit.ACQ_PS = 0xf; // Acquisition window size
AdcRegs.ADCTRL1.bit.CPS = 0; // ADC预分频
AdcRegs.ADCTRL3.bit.ADCCLKPS = 3; // ADCCLK=25MHz
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; // cascaded sequencer operation
AdcRegs.ADCTRL1.bit.CONT_RUN = 1; // Continue-Run mode
AdcRegs.ADCTRL3.bit.SMODE_SEL = 0; // 顺序采样
// AdcRegs.ADCOFFTRIM.bit.OFFSET_TRIM = 120;
AdcRegs.ADCMAXCONV.all = 0x0005; // 6 channels of AD convertion in SEQ
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x00;
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x01;
AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x02;
AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x03;
AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0x04;
AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0x05;
AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 0x1; // 软件强制触发转换
}
这个我看了,但我的ad采集的数值跟pwm波输出的频率跟电压都没关系啊
恩恩,那我在研究研究,谢谢啦