Страница 1 из 1

Atmega16 3-х фазное напряжение

Добавлено: Чт апр 14, 2011 09:05:34
geniusbsd
Требуется получить с помошью шим микроконтроллера 3-х фазное напряжение частотой 50Гц
Как это сделать не знаю
Помогите начинающиму кодом на С!!!

Re: Atmega16 3-х фазное напряжение

Добавлено: Чт апр 14, 2011 09:10:37
x-files
еще наверное и синус? :)

Re: Atmega16 3-х фазное напряжение

Добавлено: Чт апр 14, 2011 09:11:58
pyzhman
Выложите, пожалуйста, весь текст задания. Как он задан.

Re: Atmega16 3-х фазное напряжение

Добавлено: Чт апр 14, 2011 09:20:59
Goldsmith
Насколько я помню, в примерах к VMLAB один из проектов как раз и есть трехфазный генератор синусоиды. Возьмите за образец.

Re: Atmega16 3-х фазное напряжение

Добавлено: Чт апр 14, 2011 09:30:22
CS16AMX
http://my-avr.at.ua/publ/pervye_popytki ... m/1-1-0-49 но смотрели как вариант?

Re: Atmega16 3-х фазное напряжение

Добавлено: Чт апр 14, 2011 09:35:30
geniusbsd
Есть сельсин БС-1404 110В 50Гц. Будет использоваться как датчик(жестко связан с валом двигателя) Для снятия данных на трехфазную обмотку статора подается трехфазное напряжение (В обычном режиме работы сельсина напряжение синхронизации на статоре 50В) А с обмотки ротора через операционный усилить снимается сигнал. В прикрепленном файле подобная схема толька на PIC

Re: Atmega16 3-х фазное напряжение

Добавлено: Чт апр 14, 2011 09:52:57
pyzhman
Тогда уж и исходник PICa.

Re: Atmega16 3-х фазное напряжение

Добавлено: Чт апр 14, 2011 10:12:52
geniusbsd
pyzh_man писал(а):Тогда уж и исходник PICa.
В приложенном файле исходник на асм

Само описание в журнале радио № 4 за 2005год страница 63

Re: Atmega16 3-х фазное напряжение

Добавлено: Чт апр 14, 2011 18:39:57
geniusbsd
Вот кусок кода для генерации синусойды, но осциилограф показывает не синусойду а прямоугольник. Моделирую в протеусе

Код: Выделить всё

#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include "TableSin.h"

int main( void )
{
  //инициализация портов
  PORTB = 0;
  DDRB = 0xff;
  
  //инициализация таймера Т0
  TIMSK = (1<<OCIE0);
  //реж. - fast pwm, вывод OC0 - неинверт. шим, предделитель - на 8
  TCCR0 = (1<<WGM01)|(1<<WGM00)|(1<<COM01)|(0<<COM00)|(0<<CS02)|(1<<CS01)|(0<<CS00);
  //обнуляем счетный регистр и регистр сравнения
  TCNT0 = 0;
  OCR0 = 0;
    
  //разрешаем прерывания  
  sei();
  while(1);
  return 0;
}

//**********************************************************
//Прерывание таймера/счетчика Т0
ISR(TIMER0_COMP_vect)
{
  static unsigned char i = 0;
  //считываем элемент массива из флэш памяти и записываем в регистр сравнения
OCR0 = pgm_read_byte(&TableSin[i]);
 i++;
  if (i == 130) i = 0;
}

Re: Atmega16 3-х фазное напряжение

Добавлено: Чт апр 14, 2011 19:37:34
ellioh
geniusbsd писал(а):Вот кусок кода для генерации синусойды, но осциилограф показывает не синусойду а прямоугольник. Моделирую в протеусе
Если прямоугольники с той частотой, которая должна быть, надо смотреть файл с данными синусоиды. А вот если с достаточно высокой частотой, это ШИМ так работает. :-) Он же генерирует импульсы длины, пропорциональной значению сигнала. Надо какую-то интегрирующую схему поставить, хотя бы подключить через резистор конденсатор (все параметры надо подбирать) и снимать напряжение с конденсатора.

Резистор подобрать так, чтобы даже при полностью разряженном конденсаторе при подаче напряжения 5В ток был не больше 20 мА. А конденсатор подбирать примерно так, чтобы время его заряда до половины через этот резистор было много больше периода импульсов, но много меньше периода синусоиды.

Re: Atmega16 3-х фазное напряжение

Добавлено: Чт апр 14, 2011 20:05:53
geniusbsd
ellioh писал(а):
geniusbsd писал(а):ВНадо какую-то интегрирующую схему поставить, хотя бы подключить через резистор конденсатор (все параметры надо подбирать) и снимать напряжение с конденсатора.
Поставил сопротивление 470 и кондер 1мк и пошда синусойда

Re: Atmega16 3-х фазное напряжение

Добавлено: Чт апр 14, 2011 23:13:20
geniusbsd
Не получается запустить шим на таймере Т1

Делаю вот так инициализацию трех таймеров. Т0 и Т2 работают нормально а вот Т1 не запускается в чем может быть ошибка?

Код: Выделить всё

 TIMSK = (1<<OCIE0|1<<OCIE2|1<<OCIE1A );
  //реж. - fast pwm, вывод OC0 - неинверт. шим, предделитель - на 8
 TCCR0 = (1<<WGM01)|(1<<WGM00)|(1<<COM01)|(0<<COM00)|(0<<CS02)|(1<<CS01)|(0<<CS00);

 TCCR2 = 0x6A;
TCCR1A = 0xA1;
  //обнуляем счетный регистр и регистр сравнения
  TCNT0 =0;
  OCR0 = 0;
   TCNT2 = 0;
  OCR2 = 0; 
 TCNT1=0x00;
OCR1A=0x00;
...................
ISR(TIMER1A_COMP_vect)
{
  static unsigned char i = 0;
  //считываем элемент массива из флэш памяти и записываем в регистр сравнения
OCR1A = pgm_read_byte(&TableSin[i]);
 i++;
  if (i == 115) i = 0;
}