http://we.easyelectronics.ru/electro-and-pc/ft232-kak-podruzhit-1-wire-s-kompom.html
пятница, 27 июня 2014 г.
суббота, 21 июня 2014 г.
NRF24l01
RUS:
http://www.doneathome.ru/archives/1384
Передача данных при помощи радио модулей nRF24L01
nRF24L01(ссылка) это - Радиомодуль для связи микроконтроллеров между собой. Работает на частоте 2.4ГГц (не требующая разрешений частота, которая так же используется для WiFi), скорость до 2Мбит, управляется по интерфейсу SPI, питание 3.3В Радиус действия — в пределах квартиры, через две стены работает уверенно, через три — бывают потери сигнала.
Основные характеристики:
1. Напряжение питания от 1.9 до 3.6 Вольт DC.
2. Ток потребления:
- пиковый ток при 2Мбит 12.5 мА.
- рабочий ток 11мА
- режим ожидания 32 мкА.
3. Скорость передачи до 2Мбит. SPI интерфейс.
4. 125 каналов связи, скачкообразная перестройка частоты.
5. Поддержка многоточечной связи, аппаратный контроль ошибок.
6. Встроенная 2.4 ГГц антенна.
7. Встроенный стабилизатор напряжения.
8. Количество PIN – 8.
9. Радиус действия 100 метров (открытое пространство)
10, Размер 33 х 14 мм.
11, Вес до 10 гр.
12. Документация (ссылка)
Статьи в помощь:
AVR микроконтроллеры для начинающих (урок 10) SPI-интерфейс
AVR микроконтроллеры для начинающих (урок 8) Внешние прерывания в avr
AVR микроконтроллеры для начинающих (урок 12) UART/USART в avr
Подключение avr микроконтроллера к компьютеру
Ножки наших модулей:
1. GND — Общий провод.
2. VCC - Питание, от 1.9 до 3.6В, что печально ведь 5v не подходит.
3. CE — Chip Enable. Назначение ножки зависит от режима работы.
- Если чип сконфигурирован как приемник, то высокий (HIGH) уровень на CE позволяет чипу мониторить среду и получать пакеты от других радио модулей. Низкий (LOW) уровень переводит чип в Standby-I (не мониторим среду).
-Если чип настроен на передачу, CE всегда держится на низком уровне. В этом случае для передачи данных нужно положить их в очередь FIFO и дернуть CE минимум на 10мкс.
4. CSN — Chip Select Not. Not, потому что ножка инвертирована. С помощью данного сигнала происходит активация ведомого устройства.
5. SCK - Стробирующий сигнал SPI. Используется для синхронизации при передаче данных.
6. MOSI - Master Output, Slave Input (выход ведущего,вход ведомого). Данный сигнал предназначен для последовательной передачи данных от ведущего к ведомому.
7. MISO - Master Input, Slave Output (вход ведущего, выход ведомого). Данный сигнал предназначен для последовательной передачи данных от ведомого к ведущему.
8. IRQ. Interrupt Pin. Дежурный уровень — высокий. Данный вывод предназначен для прерываний от нашего радио модуля. Активный уровень — низкий. Значит когда происходит событие прерывания эта ножка из напряжения лог (1) перейдет в лог (0).
Схема подключения:Видим на схеме не понятный прямоугольничек (IN,OUT,GND). Это интегральный стабилизатор на 3.3v. Это устройство позволяет сделать вторичный источник питания на 3.3V. Емкости выбираются в зависимости от выбранного стабилизатора.
Для выбора интегрального стабилизатора необходимо знать о важных параметрах:
1) Диапазон входного напряжения.
2) Выходное напряжение.
3) Максимальный выходной ток.
4) Падение напряжение на стабилизаторе.
IRQ — подключаем к PB2 т.к на этой ножке можно настроить прерывания.
CE - подключаем к PB3 т.к удобно использовать один порт на устройство.
CSN - подключаем к PB4 т.к на это ножка SPI интерфейса вкл/выкл ведомого.
MOSI - подключаем к PB5 т.к на это ножка SPI интерфейса выход мастера.
MISO - подключаем к PB6 т.к на это ножка SPI интерфейса вход мастера.
SCK - подключаем к PB7 т.к на это ножка SPI интерфейса тактирование.
Ссылки на комплектующие:
Микроконтроллер: ATmega32 (ссылка)
Радио модули : nRF24L01 (ссылка)
Интегральные стабилизаторы:
NCP551SN33T1G [0.15 A, падение 0.04-0.15 V, Uвх до 12 V] (ссылка)
LP2950ACZ-3.3 [0.1 A, падение 0.35 V, Uвх до 30 V] (ссылка)
MCP1702T-3302E/CB [ 0.25 A, падение 0.97 V, Uвх до 13.2 V] (ссылка)
Конденсаторы: Рекомендую покупать наборы разных номиналов (ссылка)
Ссылки на код и документацию:
пятница, 20 июня 2014 г.
Как подключить микросхему по SPI
RUS:
http://microsin.ru/content/view/1276/44/
http://www.echemist.in.ua/2012/04/%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0-atmega8-%D1%81-ads1286/
http://avrproject.ru/publ/poleznaja_informacija/configuration_spi_bascom_avr/4-1-0-66
http://easymcu.ru/publ/11-1-0-78
http://chipenable.ru/index.php/programming-avr/item/138-avr-spi-module-part2.html
http://samou4ka.net/page/podkljuchenie-vneshnego-acp-po-spi-k-mikrokontrolleru-avr
http://www.embed.com.ua/komplektuyushhie/tsifrovoy-potentsiometr-ad8402/
реализация программного SPI для подключения микросхемы потенциометра:
#include <avr/io.h>
#include <util/delay.h> #define PORT_SPI PORTD/*назначения портов и сигналов*/
#define DDR_SPI DDRD
#define PIN_SPI PIND
#define SDO PD0
#define CKL PD1
#define CS PD2
#define SHDN PD3
#define RS PD4 void init_SPI (void)//функция инициализации программного SPI
{
DDR_SPI |= (1< <SDO) | (1<<CKL) | (1<<CS) | (1<<SHDN) | (1<<RS);//все сигналы выходы
PORT_SPI |= (1<<CS) | (1<<SHDN) | (1<<RS);//с лог. 1
PORT_SPI &= ~(1<<SDO);//и лог. 0
PORT_SPI &= ~(1<<CKL);//
} void set_resistance (unsigned char addr, unsigned char value)//функция записи
{
unsigned char i;//переменная для цикла
unsigned int addr_value;//промежуточная переменная для вычисления управляющего слова addr_value = ((unsigned int) (addr<<8)) | ((unsigned int) value);//формируем управляющее слово из двух бит адреса и байта сопротивления
PORT_SPI &= ~(1<<CS);//выбор микросхемы for(i=0; i < 10; i++)//для 10 бит управляющего слова
{ if(0x0001 & (addr_value>>(9-i))) PORT_SPI |= (1< <SDO);//если бит-единица, то и выставляем единицу
else PORT_SPI &= ~(1<<SDO);//иначе - выставляем ноль
PORT_SPI |= (1<<CKL);//фронт синхроимпульса
PORT_SPI &= ~(1<<CKL);//спад синхроимпульса
}
PORT_SPI |= (1<<CS);//не выбираем микросхему
} int main (void)//главная функция
{
unsigned char q;//переменная для цикла init_SPI();//инициализируем программный SPI while (1)//в бесконечном цикле
{
for(q=0;q < 255; q++)//для всех 256 значений сопротивления
{
set_resistance(0x01, q);//поочередно устанавливаем для 1-го потенциометра
//_delay_ms(500);//это для наладки, можно смотреть омметром изменение сопротивления 1-го потенциометра
}
}
}
ENG:
понедельник, 9 июня 2014 г.
Управление 3х фазным двигателем апноуты
http://www.atmel.com/applications/homeappliances/motor_control/default.aspx
http://www.gaw.ru/html.cgi/txt/app/micros/avr/index.htm много переведённых апноутов
freescale: an1627,1913,1914,2355,DRM077
cypress: an2227,47936
atmel: avr172,498
microchip: an857,885,894,970,1160,1305
infineon: ap08018
silabs: an208
st: an1130,1946,2267,2502
ti: bpra072,spra324
zilog: an0226
пятница, 30 мая 2014 г.
Самодельный станок ЧПУ фрезеровка плат
микрошаг открытые проекты:
http://mardus-kreutz.blogspot.com/2008/11/mardus-kreutz-unipolar-micro-stepper_24.html
http://www.pminmo.com/kreutz/Mardus-Kreutz%20Schematics%20Rev%202.1E.pdf
линистеппер http://www.piclist.com/techref/io/stepper/linistep/liniv2_bld.htm
http://robozone.su/cnc-home/50-mikroshagovyjj-kontroller-shagovogo-dvigatelja-na.html
полезные ссылки:
http://www.deep-shadows.com/hax/wordpress/?page_id=1057
Управление двигателями шаговыми:
http://eldigi.ru/articles/shagovye_dvigateli_stepper_motors RUS
http://www.npoatom.ru/articles/4.html#6 униполярный и биполярный как включать обмотки.(Биполярный – > в Униполярный) RUS
http://www.npoatom.ru/articles/4.html#6 RUS
http://ww1.microchip.com/downloads/en/AppNotes/1307A.pdf !!!!!!!!!!!!!!!!!!!!
http://www.microchip.com/stellent/groups/SiteComm_sg/documents/DeviceDoc/en548365.pdf!!!!!!!!!!!!!!!!!!!!!
http://www.atmel.com/images/doc8017.pdf АТМЭЛ
http://www.dr-iguana.com/prj_StepperDriver/index.html
http://ww1.microchip.com/downloads/en/AppNotes/00822a.pdf
http://ww1.microchip.com/downloads/en/AppNotes/00906B.pdf
http://e2e.ti.com/group/launchyourdesign/m/msp430microcontrollerprojects/665483.aspx
http://cnc-club.ru/forum/viewtopic.php?f=41&t=2558&start=300
воскресенье, 18 мая 2014 г.
Адаптер USB to USART & SPI & I2C
Все началось с того, что мне надо было подключиться к одному устройству по USART. Я сразу взял адаптер USB to UASRT (ибо в ноутбуке COM порт не предусмотрен) на AtTiny2313 (рекламой заниматься не буду, схема легко находится в интернете), подключил, запустил и внезапно понял, что у адаптера фиксированная скорость 9600, а у девайса, к которому требовалось подключиться, скорость 57600. Дело, естественно, было поздним вечером, и купить что-нибудь вроде FT232 возможности не было. Поэтому после непродолжительного раздумья, было решено изменить скорость UASRT в адаптере обычной перепрошивкой. В итоге соединение было успешно налажено. Но согласитесь - это ведь не выход, программатора может под рукой не оказаться, да и неудобно каждый раз с прошивкой шаманить. В следствие этого я серьезно задумался о создании нормального адаптера, с регулируемой скоростью (и не только).
пятница, 16 мая 2014 г.
Генерирование таблицы синуса в матлабе
Процесс по шагам на примере MatLab Version 6.5.0.180913a Release 13.
1. File -> New -> M-file. Окроется новое окно редактора кода программы MatLab.
2. Скопипастите в окно редактора код:
function GenerateSinusTable (size)
% Генерирует таблицу синуса в файле sinus.c
% Пример вызова:
% GenerateSinusTable(256)
stream_c = fopen('sinus.c' ,'wt');
fprintf (stream_c , '__flash char SINUS_ML [%i] = \n{\n', size);
for k=0:size-1
if (0==bitand(k, 7))
fprintf(stream_c , ' ');
end;
sinus = round(127 + 124*sin(2*pi*k/size));
fprintf(stream_c , '%i', sinus);
if (not((k+1)==size))
fprintf(stream_c , ',');
end;
if (7==bitand(k, 7))
fprintf(stream_c , '\n');
end;
end
fprintf (stream_c, '};\n');
fclose(stream_c);
% Построение графика полученной таблицы:
x=0:1:size; y=round(127 + 124*sin(2*pi*x/size)); plot (x,y)
3. Сохраните наш файл кода под именем GenerateSinusTable.m (важно, чтобы имя файла совпадало с именем функции), запускаем на выполнение в консоли MatLab:
>> GenerateSinusTable(128) [нажмите Enter]
После запуска появится окошко с графикой периода синусоиды, и в текущей папке появится сгенерированный файл sinus.c.
Микрошаговый режим для шаговика
Ссылки по теме:
http://robozone.su/cnc-home/page,1,3,48-mikroshagovyjj-kontroller-shagovogo-dvigatelja-na.html – реализован микрошаговый режим с осциллограммами и видео.
http://radiokot.ru/circuit/digital/security/26/
Сегодня пробовал запустить микрошаговый режим для униполярного двигателя, имеющего 4 обмотки соединенных в общую точку. На каждую обмотку пробовал подавать синус.
Результат таков что не получил микрошага, а какой то не понятный режим + на некоторых напряжениях двигатель начинает шуметь, а на некоторых такое ощущение что микрошаг у двигателя но только при одной скорости.
Осциллограммы с затворов ключей.(сигналы сдвинуты на 90град.)
Делал на stm32f103rbt6 + силовая платка с транзисторами IRF1607.
Хорошая анимация показывающая полушаговую работу униполярного двигателя.(На этом сайте имеется много подобного рода анимаций)
среда, 14 мая 2014 г.
Микрошаговый режим для шагового двигателя
Для получения микрошагового режима для необходимо подавать на обмотки двигателя синусоидальный ШИМ, вместо дискретного сигнала, как это делается для шагового или полушагового режима.
Апноуты Atmel, TI, NXP и т.д
Application Notes (аппноуты) можно скачать с сайта atmel.com на английском языке в формате pdf. Много переведенных на русский язык аппноутов есть на сайте http://www.gaw.ru/ . Ссылки на них такие:
http://www.gaw.ru/html.cgi/txt/app/micros/avr/AVRnnn.htm
где заместо AVRnnn нужно подставить номер аппноута. Например, для аппноута "AVR444: Sensorless control of 3-phase brushless DC motors" ссылка на исходник должна быть такой:
http://www.gaw.ru/html.cgi/txt/app/micros/avr/AVR444.htm
Скачать исходники к Application Notes можно по ссылкам:
http://www.atmel.com/dyn/resources/prod_documents/AVRnnn.zip
где заместо AVRnnn нужно подставить номер аппноута. Например, для аппноута AVR444 ссылка на исходник должна быть такой:
http://www.atmel.com/dyn/resources/prod_documents/AVR444.zip
Последнее обновление ( 31.08.2008 )
Взято с microsin.net
пятница, 9 мая 2014 г.
3ф синусоидальный ШИМ. (Организации временных задержек для шагания по таблице синуса )
Можно также очень просто реализовывать задержки инкрементирования переменной i, не делеями, а по другому.
while(1)
{
i++;
delayus(20)
}
для того чтобы задрежать
можно сдеать так:
uint32 a = 0;
uint32 i = 0;
uint32 delay_inc = 1;
while(1)
{
if (i%delay_inc == 0) a++;
i++;
}
Если i++ тикает в прерывании с частотой 100 раз в секунду, то при помощи delay_inc мы можем выставлять делитель для переменной a, если delay_inc=1 то переменная а тикает с такой же частотой как и i.
Если delay_inc=20, то переменная а тикает с частотой 100/20=5 раз в секунду и т.д