Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Работа с АЦП
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
Cruz21
Была поставлена задача сконструировать генератор прямоугольных импульсов с регулируемой частотой и скваженностью на микроконтроллере msp430g2452
Есть собственно отладочная плата и на нем имеется программатор. LaunchPad MSP-EXP430G2 от Ti. Еще имеется вставная плата, которую сам собрал. На нем имеется два потенциометра по 10 кОм подсоединенные на ножки МК Р1.0 и Р1.1
Изучая Таймер А я добился создать прямоугольные импульсы, но никак не могу разобраться с АЦП. Как с помощью АЦП можно сделать так, чтоб при вращении одного потенциометра изменялась частота, а другой скваженность? Какие регистры подключить и с какими значениями?
вот исходник образования импульсов

#include "msp430g2452.h"

void main( void )
{
WDTCTL = WDTPW + WDTHOLD;
P1DIR |= BIT6; // (использовал BIT6, так как он был прописан в библиотеке как #define BIT6 (0x0040u))
P1SEL |= BIT6;
TACCTL1 = OUTMOD_3;
TACCR0 = 60000;
TACCR1 = 30000;
TACTL = TASSEL_2 + MC_1;
while (1);

}
а дальше что нужно, чтобы я мог регулировать свой импульс?
E.V.G.
Регистр TACCR0 задаёт период импульсов, TACCR1 задаёт длительность импульса. Удобней использовать режим OUTMOD_7 потому, что в этом случае увеличение значения в регистре TACCR1 будет преводить к увеличению длительности импульса. С частотой - наоборот. Чем больше TACCR0 - тем ниже частота. Нужно соблюдать правило - TACCR1 < TACCR0. Если укажите диапазон перестройки частоты и минимальное приращение длительности, то можно вычислить необходимую входную частоту.
В вашем случае может быть удобным не использовать АЦП для перестройки частоты и длительности, а навесить кнопки и сделать плавную перестройку при кратковременном нажати кнопки и грубую - при удержании кнопки.
Cruz21
Цитата(E.V.G. @ Jan 25 2013, 09:19) *
Регистр TACCR0 задаёт период импульсов, TACCR1 задаёт длительность импульса. Удобней использовать режим OUTMOD_7 потому, что в этом случае увеличение значения в регистре TACCR1 будет преводить к увеличению длительности импульса. С частотой - наоборот. Чем больше TACCR0 - тем ниже частота. Нужно соблюдать правило - TACCR1 < TACCR0. Если укажите диапазон перестройки частоты и минимальное приращение длительности, то можно вычислить необходимую входную частоту.
В вашем случае может быть удобным не использовать АЦП для перестройки частоты и длительности, а навесить кнопки и сделать плавную перестройку при кратковременном нажати кнопки и грубую - при удержании кнопки.


дело в том что я уже сделал сам прибор, там у меня не кнопки, а потенциометры
пока добился что только TACCR1 могу аппаратно менять, а TACCR0 не получается
#include "msp430G2452.h"

void main(void)
{
WDTCTL = WDTPW + WDTHOLD;
ADC10CTL0 = ADC10SHT_2 + ADC10ON;
ADC10AE0 |= 0x01;
ADC10DTC1 = 0x001;
P1DIR |= BIT6;
P1SEL |= BIT6;
TACCR0 = 1024 - 1;
TACCTL1 = OUTMOD_7; // TACCR1 reset/set
TACCR1 = 512; // TACCR1 PWM Duty Cycle
TACTL = TASSEL_2 + MC_1; // SMCLK, upmode

while(1)
{
ADC10CTL0 |= ENC + ADC10SC; // Start sampling
while(ADC10CTL1 & 0x01);
TACCR1 = ADC10MEM;
}
}
rezident
Цитата(Cruz21 @ Jan 27 2013, 16:01) *
пока добился что только TACCR1 могу аппаратно менять, а TACCR0 не получается

Как-то у вас все слишком прямолинейно. Даже если предположить, что на потенциометры подается то же самое по величине напряжение, что и опорное напряжение АЦП, то все равно масштабирование нужно сделать. Ведь код от АЦП 10-и разрядный, а таймер 16-и разрядный. Это во-первых.
Во-вторых, изменение входных напряжений и генерация выходного ШИМ это два асинхронных процесса. По крайней мере у вас они асинхронны. Для синхронизации изменения управляющего сигнала и выдачи вычисленного воздействия сигнала ШИМ требуется хранить отдельно результат измерения и значение для загрузки в регистры таймера. Причем загружать значения в регистры таймера (и CCR1 и CCR0) следует в прерывании от CCR0.
Cruz21
Цитата(rezident @ Jan 27 2013, 23:33) *
что и опорное напряжение АЦП, то все равно масштабирование нужно сделать.

не понял, как и что сделать?

Я всего лишь студент, и это мой первый проект. Было бы здорово если объяснили на пальцах, а то очень трудно мне все осмыслить
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.