ZHCAER6 August 2024 MSPM0G1105 , MSPM0G1106 , MSPM0G1107 , MSPM0G1505 , MSPM0G1506 , MSPM0G1507 , MSPM0G3105 , MSPM0G3106 , MSPM0G3107 , MSPM0G3505 , MSPM0G3506 , MSPM0G3507 , MSPM0L1105 , MSPM0L1106 , MSPM0L1303 , MSPM0L1304 , MSPM0L1304-Q1 , MSPM0L1305 , MSPM0L1305-Q1 , MSPM0L1306 , MSPM0L1306-Q1 , MSPM0L1343 , MSPM0L1344 , MSPM0L1345 , MSPM0L1346
此示例演示了如何将模拟信号转换为 4kHz PWM 输出。使用 MSPM0 集成式 ADC 对模拟输入信号进行采样。PWM 输出的占空比根据 ADC 读数进行更新。本示例需要两个计时器;一个用于触发 ADC 读取,另一个用于生成 PWM 输出。下载此示例的代码。
图 1-1 显示了该示例中使用的外设的功能方框图。
此应用需要 2 个计时器、1 个集成 ADC 和 2 个器件引脚。
子块功能 | 外设 用法 | 注释 |
---|---|---|
采样触发 | (1x) 计时器 G | 在代码中称为 TIMER_0_INST |
PWM 生成 | (1 个)计时器 G | 在代码中称为 PWM_0_INST |
模拟信号捕获 | 1 个 ADC 通道 | 在代码中称为 ADC12_0_INST |
IO | 2 引脚 | (1x) ADC 输入 (1x) PWM 输出 |
确定所需的 PWM 输出频率和分辨率。在计算其他设计参数时,以这两个参数为起点。在该示例中,我们选择了 4kHz 的 PWM 输出频率和 10 位的 PWM 分辨率。
计算计时器时钟频率。公式 F_clock = F_pwm x 分辨率可用于计算计时器时钟频率。
确定 ADC 采样率。采样率与输出 PWM 频率相关。在该示例中,单个 ADC 样本确定占空比。F_adc = F_pwm。然而,滤波或平均值计算可能要求应用选择不同的采样率。
在 SysConfig 中配置外设。选择将使用的计时器实例。配置将用于 ADC 输入和 PWM 输出的器件引脚。该示例将 PA17 用于 PWM 输出(连接到计时器 G4),将 A0.4 用于模拟输入。
编写应用程序代码。该应用的剩余部分是将 ADC 样本传输到 PWM 计时器。这是在软件中实现的。请参阅“软件流程图”以了解应用程序概况或直接浏览代码。
最大输出频率:从根本上说,最大 PWM 输出频率受 IO 速度的限制。不过,占空比分辨率也会影响最大输出频率。更高的分辨率需要更多的计时器计数,从而增加输出周期。
时钟:确定使用哪些时钟以及使用哪些时钟分频比是该应用的重要设计注意事项。
选择 2 的幂作为分辨率,以便缩放运算可以使用移位而不是乘以和除以 b.
通常,不要将较慢的时钟分频到较低的频率,而是选择较慢的时钟以降低功耗 3.
gCheckADC 上的竞态条件:该应用会尽快清除 gCheckADC。如果应用等待清除 gCheckADC 的时间过长,则可能会无意中丢失新数据。
流水线:该应用中选择的 PWM 计时器支持计时器比较值流水线。流水线使应用能够计划计时器比较值更新,而不会对输出产生干扰。在不支持流水线的情况下,有一些技术可以缓解计时器上的干扰。但这超出了本文档的讨论范围。
此应用的 PWM 输出具有 10 位分辨率。不过,ADC 样本是 12 位,因此我们必须将 12 位 ADC 读数转换为 10 位值,以便设置 PWM 计时器的比较值。根据应用要求,可能需要不同的调节。
此外,可能需要对传入数据进行更先进的信号处理。例如,限制、平均值或其他滤波在不同情况下可能很重要。可以在以下函数中执行这些类型的操作。
void updatePWMfromADCvalue(uint16_t adcValue) {
// Check to see if the adc value is above our minimum threshold
if (adcValue > PWM_DEADBAND)
{
// Convert 12bit adcValue into 10bit value by right
// shifting by 2 because the PWM resolution is 10bit
uint16_t adcValue_10bit = adcValue >> 2;
// PWM timer is configured as a down counter (i.e it
// starts counting down from PWM_LOAD_VAL) and its
// initial state is high therefore we must perform
// the following operation so that small values of
// adcValue_10bit result in small duty cycles
uint16_t ccv = PWM_LOAD_VAL - adcValue_10bit;
// Write the new ccv value into the corresponding timer
// register
DL_TimerG_setCaptureCompareValue(PWM_0_INST,
ccv,
DL_TIMER_CC_0_INDEX);
// Start the timer if it is not already running
if ( !DL_TimerG_isRunning(PWM_0_INST) ) {
DL_TimerG_startCounter(PWM_0_INST);
}
}
else {
// If adcResult is not above deadband value then disable timer
DL_TimerG_stopCounter(PWM_0_INST);
}
}
当输入电压低于预设的死区值时,输出被禁用,如图 1-3 所示。
在图 1-4 中,输入电压为 2.26V。测得的占空比为 67.93%。快速计算确认预期占空比为 68.4%。
日期 | 修订版本 | 注释 |
---|---|---|
August 2024 | * | 初始发行版 |
TI 均以“原样”提供技术性及可靠性数据(包括数据表)、设计资源(包括参考设计)、应用或其他设计建议、网络工具、安全信息和其他资源,不保证其中不含任何瑕疵,且不做任何明示或暗示的担保,包括但不限于对适销性、适合某特定用途或不侵犯任何第三方知识产权的暗示担保。
所述资源可供专业开发人员应用TI 产品进行设计使用。您将对以下行为独自承担全部责任:(1) 针对您的应用选择合适的TI 产品;(2) 设计、验证并测试您的应用;(3) 确保您的应用满足相应标准以及任何其他安全、安保或其他要求。所述资源如有变更,恕不另行通知。TI 对您使用所述资源的授权仅限于开发资源所涉及TI 产品的相关应用。除此之外不得复制或展示所述资源,也不提供其它TI或任何第三方的知识产权授权许可。如因使用所述资源而产生任何索赔、赔偿、成本、损失及债务等,TI对此概不负责,并且您须赔偿由此对TI 及其代表造成的损害。
TI 所提供产品均受TI 的销售条款 (http://www.ti.com.cn/zh-cn/legal/termsofsale.html) 以及ti.com.cn上或随附TI产品提供的其他可适用条款的约束。TI提供所述资源并不扩展或以其他方式更改TI 针对TI 产品所发布的可适用的担保范围或担保免责声明。IMPORTANT NOTICE
邮寄地址:上海市浦东新区世纪大道 1568 号中建大厦 32 楼,邮政编码:200122
Copyright © 2024 德州仪器半导体技术(上海)有限公司