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

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
geniusbsd
Встал на лапы
Сообщения: 82
Зарегистрирован: Ср авг 19, 2009 09:34:50

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

Сообщение geniusbsd »

Требуется получить с помошью шим микроконтроллера 3-х фазное напряжение частотой 50Гц
Как это сделать не знаю
Помогите начинающиму кодом на С!!!
Реклама
Аватара пользователя
x-files
Грызет канифоль
Сообщения: 279
Зарегистрирован: Ср мар 30, 2011 09:42:29
Откуда: Украина, Одесса
Контактная информация:

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

Сообщение x-files »

еще наверное и синус? :)
[i][size=85]Не учите меня жить, лучше помогите материально...[/size][/i]
Реклама
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

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

Сообщение pyzhman »

Выложите, пожалуйста, весь текст задания. Как он задан.
Docendo discimus
Аватара пользователя
Goldsmith
Опытный кот
Сообщения: 736
Зарегистрирован: Пн янв 10, 2011 03:06:36
Откуда: Ростов-на-Дону
Контактная информация:

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

Сообщение Goldsmith »

Насколько я помню, в примерах к VMLAB один из проектов как раз и есть трехфазный генератор синусоиды. Возьмите за образец.
Любой дурак может писать код. Настоящий профессионал - это тот, кто способен постоянно создавать продукт высокого качества, укладываясь при этом в бюджет.
J. Ganssle
Реклама
Эиком - электронные компоненты и радиодетали
CS16AMX
Нашел транзистор. Понюхал.
Сообщения: 195
Зарегистрирован: Вт ноя 30, 2010 00:50:40

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

Сообщение CS16AMX »

http://my-avr.at.ua/publ/pervye_popytki ... m/1-1-0-49 но смотрели как вариант?
Реклама
geniusbsd
Встал на лапы
Сообщения: 82
Зарегистрирован: Ср авг 19, 2009 09:34:50

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

Сообщение geniusbsd »

Есть сельсин БС-1404 110В 50Гц. Будет использоваться как датчик(жестко связан с валом двигателя) Для снятия данных на трехфазную обмотку статора подается трехфазное напряжение (В обычном режиме работы сельсина напряжение синхронизации на статоре 50В) А с обмотки ротора через операционный усилить снимается сигнал. В прикрепленном файле подобная схема толька на PIC
Вложения
1236359991_111.gif
Схема на ПИК
(24.67 КБ) 499 скачиваний
Реклама
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

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

Сообщение pyzhman »

Тогда уж и исходник PICa.
Docendo discimus
geniusbsd
Встал на лапы
Сообщения: 82
Зарегистрирован: Ср авг 19, 2009 09:34:50

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

Сообщение geniusbsd »

pyzh_man писал(а):Тогда уж и исходник PICa.
В приложенном файле исходник на асм

Само описание в журнале радио № 4 за 2005год страница 63
Вложения
sels_dat.asm
(6 КБ) 325 скачиваний
sels_ind.asm
Исходник к пику
(2.29 КБ) 351 скачивание
geniusbsd
Встал на лапы
Сообщения: 82
Зарегистрирован: Ср авг 19, 2009 09:34:50

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

Сообщение 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;
}
ellioh
Встал на лапы
Сообщения: 100
Зарегистрирован: Сб янв 22, 2011 16:57:45

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

Сообщение ellioh »

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

Резистор подобрать так, чтобы даже при полностью разряженном конденсаторе при подаче напряжения 5В ток был не больше 20 мА. А конденсатор подбирать примерно так, чтобы время его заряда до половины через этот резистор было много больше периода импульсов, но много меньше периода синусоиды.
Клоподавер упрыгхт
geniusbsd
Встал на лапы
Сообщения: 82
Зарегистрирован: Ср авг 19, 2009 09:34:50

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

Сообщение geniusbsd »

ellioh писал(а):
geniusbsd писал(а):ВНадо какую-то интегрирующую схему поставить, хотя бы подключить через резистор конденсатор (все параметры надо подбирать) и снимать напряжение с конденсатора.
Поставил сопротивление 470 и кондер 1мк и пошда синусойда
geniusbsd
Встал на лапы
Сообщения: 82
Зарегистрирован: Ср авг 19, 2009 09:34:50

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

Сообщение 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;
}
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»