реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Работа с АЦП, Помогите разобраться
Cruz21
сообщение Jan 24 2013, 14:31
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 23-01-13
Пользователь №: 75 313



Была поставлена задача сконструировать генератор прямоугольных импульсов с регулируемой частотой и скваженностью на микроконтроллере 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);

}
а дальше что нужно, чтобы я мог регулировать свой импульс?
Go to the top of the page
 
+Quote Post
E.V.G.
сообщение Jan 25 2013, 05:19
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 31-01-10
Из: Арзамас
Пользователь №: 55 175



Регистр TACCR0 задаёт период импульсов, TACCR1 задаёт длительность импульса. Удобней использовать режим OUTMOD_7 потому, что в этом случае увеличение значения в регистре TACCR1 будет преводить к увеличению длительности импульса. С частотой - наоборот. Чем больше TACCR0 - тем ниже частота. Нужно соблюдать правило - TACCR1 < TACCR0. Если укажите диапазон перестройки частоты и минимальное приращение длительности, то можно вычислить необходимую входную частоту.
В вашем случае может быть удобным не использовать АЦП для перестройки частоты и длительности, а навесить кнопки и сделать плавную перестройку при кратковременном нажати кнопки и грубую - при удержании кнопки.

Сообщение отредактировал E.V.G. - Jan 25 2013, 05:44
Go to the top of the page
 
+Quote Post
Cruz21
сообщение Jan 27 2013, 11:01
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 23-01-13
Пользователь №: 75 313



Цитата(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;
}
}
Go to the top of the page
 
+Quote Post
rezident
сообщение Jan 27 2013, 19:33
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(Cruz21 @ Jan 27 2013, 16:01) *
пока добился что только TACCR1 могу аппаратно менять, а TACCR0 не получается

Как-то у вас все слишком прямолинейно. Даже если предположить, что на потенциометры подается то же самое по величине напряжение, что и опорное напряжение АЦП, то все равно масштабирование нужно сделать. Ведь код от АЦП 10-и разрядный, а таймер 16-и разрядный. Это во-первых.
Во-вторых, изменение входных напряжений и генерация выходного ШИМ это два асинхронных процесса. По крайней мере у вас они асинхронны. Для синхронизации изменения управляющего сигнала и выдачи вычисленного воздействия сигнала ШИМ требуется хранить отдельно результат измерения и значение для загрузки в регистры таймера. Причем загружать значения в регистры таймера (и CCR1 и CCR0) следует в прерывании от CCR0.
Go to the top of the page
 
+Quote Post
Cruz21
сообщение Jan 27 2013, 19:43
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 23-01-13
Пользователь №: 75 313



Цитата(rezident @ Jan 27 2013, 23:33) *
что и опорное напряжение АЦП, то все равно масштабирование нужно сделать.

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

Я всего лишь студент, и это мой первый проект. Было бы здорово если объяснили на пальцах, а то очень трудно мне все осмыслить
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 15:00
Рейтинг@Mail.ru


Страница сгенерированна за 0.01376 секунд с 7
ELECTRONIX ©2004-2016